home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / sbin / nessus-adduser next >
Text File  |  2006-06-13  |  6KB  |  306 lines

  1. #!/bin/sh
  2. #
  3. # nessus-adduser
  4. #
  5. # Written by Renaud Deraison <deraison@cvs.nessus.org>
  6. #
  7. # This script is distributed under the Gnu General Public License (GPL)
  8. #
  9.  
  10. # check whether we have echo -n, depending
  11. # on the current shell, used
  12. case `echo -n` in
  13. \-n)    Xn=   ; Xc='\c' ;;
  14. *)    Xn=-n ; Xc=
  15. esac
  16.  
  17.  
  18.  
  19.  
  20. umask 066
  21.  
  22. is_cygwin=
  23. prefix=/usr
  24. exec_prefix=${prefix}
  25.  
  26. # add the nessus installation path
  27. PATH=${exec_prefix}/sbin:${exec_prefix}/bin:$PATH ; export PATH
  28.  
  29. # make sure that we are root, if there is no id command,
  30. # you loose, anyway
  31.  
  32. if [ -z "$is_cygwin" ];
  33. then
  34.  case `id 2>/dev/null` in 
  35.  uid=0*) 
  36.     # check the implementation
  37.     nessusd -g || {
  38.      echo "Executing nessusd failed. Make sure your library loader is configured properly"
  39.         echo "and that nessusd is in your \$PATH"
  40.         exit 1
  41.     }
  42.     ;; 
  43.  *)
  44.     echo "only root should use nessus-adduser"
  45.     exit 1
  46.  esac
  47. else
  48.  nessusd -g
  49. fi
  50.  
  51.  
  52. prefix=/usr
  53. exec_prefix=${prefix}
  54. bindir=${exec_prefix}/bin
  55. sbindir=${exec_prefix}/sbin
  56. libexecdir=${exec_prefix}/libexec
  57. datadir=/usr/share
  58. sysconfdir=/etc
  59. sharedstatedir=${prefix}/com
  60. localstatedir=/var/lib
  61. libdir=${exec_prefix}/lib
  62. includedir=${prefix}/include
  63. oldincludedir=/usr/include
  64. infodir=/usr/share/info
  65. mandir=/usr/share/man
  66.  
  67.  
  68. PATH=$PATH:$sbindir:$bindir:/usr/ssl/bin:/usr/local/ssl/bin:/opt/ssl/bin
  69.  
  70. # Test if we have MD5
  71. X=`echo x | openssl md5`
  72. if [ "$X" = "401b30e3b8b5d629635a5c613cdb7919" -o \
  73.      "$X" = "401B30E3B8B5D629635A5C613CDB7919" ]; then
  74.  MD5CMD="openssl md5"
  75. else
  76.  X=`echo x | md5sum | awk '{print $1}'`
  77.  if [ "$X" = "401b30e3b8b5d629635a5c613cdb7919" -o \
  78.       "$X" = "401B30E3B8B5D629635A5C613CDB7919" ]; then
  79.   MD5CMD=md5sum
  80.  else
  81.   MD5CMD=""
  82.  fi
  83. fi
  84.  
  85.  
  86.  
  87. # find nessusd by the first path segment, ask for settings
  88. nessusd_conf=` nessusd -s | sed '/^config_file  *= /!d; s/^[^=]*= *//;'`
  89.  
  90. # some checks
  91. [ -s "$nessusd_conf" ] || {
  92.     echo "Missing or empty configuration file \"$nessusd_conf\"!"
  93.     exit 2
  94. }
  95.  
  96. # path to a temporary directory
  97. test -z "$TMPDIR" && {
  98.       if [ -d /var/tmp ];
  99.     then
  100.       echo "Using /var/tmp as a temporary file holder"
  101.       TMPDIR=/var/tmp
  102.     else
  103.       echo "Your \$TMPDIR variable is not set ! "
  104.       echo $Xn "Enter the location to a place where I could place temporary files : [$HOME] $Xc"
  105.       read TMPDIR
  106.       test -z "$TMPDIR"  && TMPDIR=$HOME
  107.     fi  
  108. }
  109.  
  110.  
  111.  
  112.  
  113. # Here we go
  114. echo
  115. echo "Add a new nessusd user"
  116. echo "----------------------"
  117. echo
  118. echo
  119.  
  120. prompt=${ADDUSERPROMPT-0}
  121.  
  122. ok="n"
  123. while test "$ok" = "n";
  124. do
  125.  echo $Xn "Login : $Xc"
  126.  read login
  127.  if [ -d $localstatedir/nessus/users/$login ];
  128.  then
  129.    echo "This login already exists. Choose another one"
  130.  else
  131.    ok="y"
  132.  fi
  133. done
  134.  
  135.  
  136. ok="n"
  137. while test "$ok" = "n";
  138. do
  139.  echo $Xn "Authentication (pass/cert) [pass] : $Xc"
  140.  read auth
  141.  test -z "$auth" && auth="pass"
  142.  if [ "$auth" = "pass" -o "$auth" = "cert" ]; then
  143.   ok=y
  144.  fi
  145. done
  146.  
  147. if [ "$auth" = "cert" ]; then
  148.  dn=""
  149.  echo "Please enter User Distinguished Name:"
  150.  #
  151.  echo $Xn "Country: $Xc"
  152.  read x && [ -n "$x" ] && dn=$dn/C=$x
  153.  echo $Xn "STate: $Xc"
  154.  read x && [ -n "$x" ] && dn=$dn/ST=$x
  155.  echo $Xn "Location: $Xc"
  156.  read x && [ -n "$x" ] && dn=$dn/L=$x
  157.  echo $Xn "Organization: $Xc"
  158.  read x && [ -n "$x" ] && dn=$dn/O=$x
  159.  echo $Xn "Organizational Unit: $Xc"
  160.  read x && [ -n "$x" ] && dn=$dn/OU=$x
  161.  echo $Xn "Common Name: $Xc"
  162.  read x && [ -n "$x" ] && dn=$dn/CN=$x
  163.  echo $Xn "e-Mail: $Xc"
  164.  read x && [ -n "$x" ] && dn=$dn/Email=$x
  165. else
  166. askPasswd="Login password :"
  167. askPasswdAgain="Login password (again) :"
  168. sayPasswd="Password          :"
  169.  
  170. ok="n"
  171. while test "$ok" = "n";
  172. do
  173.  echo $Xn "$askPasswd $Xc"
  174.  stty -echo
  175.  read password
  176.  echo
  177.  echo $Xn "$askPasswdAgain $Xc"
  178.  read password_again
  179.  stty echo
  180.  echo
  181.  
  182.  if test -z "$password" ; then
  183.    echo "Your password can not be empty."
  184.  else
  185.    if [ "$password" != "$password_again" ]; then
  186.     echo "Passwords do not match !"
  187.    else
  188.     ok="y"
  189.    fi
  190. fi
  191. done
  192.  
  193. fi
  194.  
  195. if [ $prompt -eq 0 ] ; then
  196. echo 
  197. echo "User rules"
  198. echo "----------"
  199.  
  200. echo "nessusd has a rules system which allows you to restrict the hosts"
  201. echo "that $login has the right to test. For instance, you may want"
  202. echo "him to be able to scan his own host only."
  203. echo
  204. echo "Please see the nessus-adduser(8) man page for the rules syntax"
  205.  
  206. echo
  207. echo "Enter the rules for this user, and hit ctrl-D once you are done : "
  208.  
  209.  
  210. echo "(the user can have an empty rules set)"
  211. mkdir -m 0700 $TMPDIR/nessus-adduser.$$/ || { echo "Error - could not create $TMPDIR/nessus-adduser.$$" ; exit 1; }
  212.  
  213. cat > $TMPDIR/nessus-adduser.$$/rules.$$ || {
  214.       echo "Error - could not write $TMPDIR/nessus-adduser.$$/rules.$$"
  215.     exit 1
  216. }
  217.  
  218. echo 
  219. echo
  220. echo "Login             : $login"
  221. echo "$sayPasswd ***********" 
  222. echo "DN                : $dn"
  223. echo "Rules             : "
  224.  
  225. cat $TMPDIR/nessus-adduser.$$/rules.$$
  226.  
  227. echo
  228. echo
  229. echo $Xn "Is that ok ? (y/n) [y] $Xc"
  230.  
  231. else
  232.     cp /dev/null $TMPDIR/nessus-adduser.$$/rules.$$
  233. fi
  234. read ok
  235.  
  236. # check for answer, default is Yes, abort on other reply
  237. case $ok in ''|[Yy]*);; *) 
  238.     rm -rf $TMPDIR/nessus-adduser.$$
  239.     echo Aborted
  240.     exit 0
  241. esac
  242.  
  243. # add the user rules in our rules files. 
  244. #
  245. # The users file must end with the default user '*', so we add
  246. # our data at the TOP of the file
  247.  
  248.  
  249.  
  250. #echo "$login:$password" > $TMPDIR/adduser.$$
  251.     
  252.  
  253. chmod 0700 "$localstatedir/nessus/"
  254. mkdir -p "$localstatedir/nessus/users/$login"
  255. chmod 0700 "$localstatedir/nessus/users/$login"
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262. #
  263. # Create the auth. dir, which contains the user rules,
  264. # password, and plugin acl
  265. #
  266. mkdir -p "$localstatedir/nessus/users/$login/auth"
  267. chmod 0700 "$localstatedir/nessus/users/$login/auth"
  268.  
  269. #
  270. # Create the plugins dir, which contains the user plugins
  271. #
  272. mkdir -p "$localstatedir/nessus/users/$login/plugins"
  273. chmod 0700 "$localstatedir/nessus/users/$login/plugins"
  274.  
  275.  
  276.  
  277. if [ "$auth" = "pass" ]; then
  278.     if [ "$MD5CMD" ]; then
  279.         test -c /dev/urandom &&
  280.     {
  281.     URANDOM=`dd if=/dev/urandom bs=16 count=16 2>/dev/null|$MD5CMD`
  282.     }
  283.     SEED=`(echo $SEED; date; df; ls -l; echo $URANDOM) | $MD5CMD | awk '{print $1}'`
  284.     H=`echo $Xn $SEED$password$Xc | $MD5CMD | awk '{print $1}'`
  285.     echo $H $SEED > "$localstatedir/nessus/users/$login/auth/hash"
  286.     else
  287.     echo "$password" > "$localstatedir/nessus/users/$login/auth/password"
  288.     fi
  289. elif [ "$auth" = "cert" ]; then
  290.     echo "$dn" > "$localstatedir/nessus/users/$login/auth/dname"
  291. fi
  292.  
  293.  
  294.  
  295. cp $TMPDIR/nessus-adduser.$$/rules.$$ "$localstatedir/nessus/users/$login/auth/rules"
  296.  
  297.  
  298.  
  299. rm -rf $TMPDIR/nessus-adduser.$$
  300.  
  301.  
  302.  
  303.  
  304.  
  305. echo "user added."
  306.